<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Descripcion de classPermiso
 *
 * @author Jonas Reyes
 */
class Permiso {
    //escriba su código aquí
    public $fecha;
    public $_idEmpleado;
    public $nombreEmpleado;
    public $cedula;
    public $codEmpleado;
    public $tipoPermiso;
    public $asuntoPermiso;
    public $textoFinal;
    public $piePagina;
    public $nombrePDF;
    public $pdf;
    public $tab;
    public $superTab;
    public $EstadoSettigTextoFinal=0;
    public $nombreDestinatario;
    public $cargoDestinatario;
    public $institucionDestinatario;
    public $fechaInicio;
    public $fechaFinal;
    public $segmento;
    public $firma;
    public $TotalDiasPermisoActual;
    public $TotalDiasPermisoMes;
    public $NPermisosMes;
    public $NDiasPermisosParcialesMes;
    public $NDiasPermisosMes;
    public $IdPermiso;

    protected $_numPermisosacumulados;
    

    function __Construct($tituloHeader="")
    {
        $this->tab="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
        $this->superTab=$this->tab.$this->tab.$this->tab.$this->tab.$this->tab.$this->tab.$this->tab.$this->tab.$this->tab.$this->tab;
        $this->pdf=new PDFPermiso();
        $this->pdf->SetCreator(PDF_CREATOR);
        $this->pdf->SetAuthor("Jonás A. Reyes Casanova");
        $this->pdf->SetTitle("Intranet de la Comision Permanente de Contraloria");
        $this->pdf->SetSubject("Solicitud de Permisos - Comisión de Contraloría");
        $this->pdf->SetKeywords("comision,permiso,kumda");
        $this->SetFecha();
        $this->pdf->SetCabecera($tituloHeader);
        // Definiendo las fuentes de cabecera y pie de página
        $this->pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
        $this->pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

        //Definiendo margenes
        $this->pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
        //$this->pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
        $this->pdf->SetFooterMargin(20);

        //definiendo el fin automático de paginas
        $this->pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

        //definiendo el factor de escala de la imagen
        //$this->pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

        //definiendo algunas palabras de dependencia del lenguaje
        $this->pdf->setLanguageArray($l);

        // definiendo la fuentes
        $this->pdf->SetFont('dejavusans', 'B', 12);

        // añadiendo la pagina
        $this->pdf->AddPage();
        
        //

    }

    function __Destruct()
    {
        
    }

    public function SetFecha()
    {
$Ano=Core::GetDateTime('a');
$Mes=Core::GetDateTime('m');
$Dia=Core::GetDateTime('d');
$this->fecha="$Dia de $Mes, $Ano";

    }

    public function InsertFecha($estilo='b')
    {
        // estilo= Negrita, Cursiva, Cursiva-Negrita
     
        $this->Reemplazar('##fecha##', $this->fecha);
        return true;
    }

    public function setIdEmpleado($id){
        $this->_idEmpleado=$id;
    }

    public function getIdEmpleado(){
        return $this->_idEmpleado;
    }

    public function SetNombreEmpleado($nombreEmpleado)
    {
        $this->nombreEmpleado=$nombreEmpleado;
    }

    public function InsertNombreEmpleado($estilo='b')
    {
        // estilo= Negrita, Cursiva, Cursiva-Negrita
        //$VarEstilada=$this->PrintEstiloTexto($this->nombreEmpleado, $estilo);
        $this->Reemplazar('##nombre_empleado##', $this->nombreEmpleado);
        return true;

    }

    public function SetNDiasPermisosMes($num) {
        $this->NDiasPermisosMes=$num;
    }

    public function InsertNDiasPermisosMes() {
        $this->Reemplazar('##n_dias_permisos_mes##', $this->NDiasPermisosMes);
        return true;
    }

    public function SetIdPermiso($id) {
        $this->IdPermiso=$id;
    }

    public function InsertIdPermiso() {
        $this->Reemplazar('##id_permiso##', $this->IdPermiso);
        return true;
    }

    public function SetNDiasPermisosParcialesMes($num) {
        $this->NDiasPermisosParcialesMes=$num;
    }

    public function InsertNDiasPermisosParcialesMes() {
        $this->Reemplazar('##n_dias_permisos_parciales_mes##', $this->NDiasPermisosParcialesMes);
        return true;
    }

    public function SetNPermisosMes($num) {
        $this->NPermisosMes=$num;
    }

    public function InsertNPermisosMes() {
        $this->Reemplazar('##n_permisos_mes##', $this->NPermisosMes);
        return true;
    }

    public function SetTotalDiasPermisoActual($num) {
        $this->TotalDiasPermisoActual=$num;
    }

    public function InsertTotalDiasPermisoActual() {
        $this->Reemplazar('##total_dias_permiso_actual##', $this->TotalDiasPermisoActual);
        return true;
    }

    public function SetTotalDiasPermisoMes($num) {
        $this->TotalDiasPermisoMes=$num;
    }

    public function InsertTotalDiasPermisoMes() {
        $this->Reemplazar('##total_dias_permiso_mes##', $this->TotalDiasPermisoMes);
        return true;
    }

    public function SetCedula($cedula)
    {
        $this->cedula=$cedula;

    }

    public function InsertCedula($estilo='b')
    {
        // estilo= Negrita, Cursiva, Cursiva-Negrita
        //$VarEstilada=$this->PrintEstiloTexto($this->cedula, $estilo);
        $this->Reemplazar('##cedula##', $this->cedula);
        return true;
    }

    public function SetNombreDestinatario($nombre){
        $this->nombreDestinatario=$nombre;
    }
    public function InsertNombreDestinatario($estilo='b'){
        //$VarEstilada=$this->PrintEstiloTexto($this->nombreDestinatario, $estilo);
        $this->Reemplazar('##nombre_destinatario##', $this->nombreDestinatario);
        return true;
    }

    public function SetFirma(){
        $this->firma=""
        ."______________________________________"
        ."$this->nombreEmpleado"
        ."$this->cedula"
        ."Cod. Empleado: $this->codEmpleado"
        ."";
    }

    public function InsertFirma(){
        $this->Reemplazar('##firma##', $this->firma);
        return true;
    }

    public function SetCargoDestinatario($cargo){
        $this->cargoDestinatario=$cargo;
    }
    public function InsertCargoDestinatario($estilo='b'){
        //$VarEstilada=$this->PrintEstiloTexto($this->cargoDestinatario, $estilo);
        $this->Reemplazar('##cargo_destinatario##', $this->cargoDestinatario);
        return true;
    }

    public function SetInstitucionDestinatario($institucion){
        $this->institucionDestinatario=$institucion;
    }
    public function InsertInstitucionDestinatario($estilo='b'){
        //$VarEstilada=$this->PrintEstiloTexto($this->institucionDestinatario, $estilo);
        $this->Reemplazar('##institucion_destinatario##', $this->institucionDestinatario);
        return true;
    }

    public function SetFechaInicio($fecha){
        $this->fechaInicio=$fecha;
    }

    public function getFechaInicio(){
        return $this->fechaInicio;
    }

    public function InsertFechaInicio($estilo='b'){
        //$VarEstilada=$this->PrintEstiloTexto($this->fechaInicio, $estilo);
        $this->Reemplazar('##fecha_inicio##', $this->fechaInicio);
        return true;
    }

    public function SetFechaFinal($fecha){
        $this->fechaFinal=$fecha;
    }

    public function getFechaFinal(){
        return $this->fechaFinal;
    }

    public function InsertFechaFinal($estilo='b'){
        //$VarEstilada=$this->PrintEstiloTexto($this->fechaFinal, $estilo);
        $this->Reemplazar('##fecha_final##', $this->fechaFinal);
        return true;
    }

    public function SetSegmento($segmento){
        $this->segmento=$segmento;
    }
    public function InsertSegmento($estilo='b'){
        //$VarEstilada=$this->PrintEstiloTexto($this->segmento, $estilo);
        $this->Reemplazar('##segmento##', $this->segmento);
        return true;
    }

    public function SetCodEmpleado($codEmpleado)
    {
        $this->codEmpleado=$codEmpleado;

    }

    public function InsertCodEmpleado($estilo='b')
    {
        //$VarEstilada= $this->PrintEstiloTexto($this->codEmpleado, $estilo);
        $this->Reemplazar('##cod_empleado##', $this->codEmpleado);
        return true;
    }

    public function SetTipoPermiso($tipoPermiso)
    {
        $this->tipoPermiso=$tipoPermiso;

    }

    public function getTipoPermiso(){
        return $this->tipoPermiso;
    }

    public function InsertTipoPermiso($estilo='B')
    {
        //$VarEstilada= $this->PrintEstiloTexto($this->tipoPermiso, $estilo);
        $this->Reemplazar('##tipo_permiso##', $this->tipoPermiso);
        return true;
    }

    public function SetAsuntoPermiso($asunto)
    {
        $this->asuntoPermiso=$asunto;

    }

    public function getAsuntoPermiso(){
        return $this->asuntoPermiso;
    }

    public function InsertAsuntoPermiso($estilo='B')
    {
        //$VarEstilada= $this->PrintEstiloTexto($this->asuntoPermiso, $estilo);
        $this->Reemplazar('##asunto_permiso##', $this->asuntoPermiso);
        return true;
    }

    public function SetTextoFinal($texto)
    {
        if (!Core::ValidacionBasica($texto)) {
            return Core::MsgError("Error, no puede definir como vacio el contenido del PDF.");
        }
        $this->textoFinal=$texto;
        $this->EstadoSettigTextoFinal=1;
        return true;
    }

    public function GetTextoFinal()
    {
        if (!Core::ValidacionBasica($this->asuntoPermiso) || !Core::ValidacionBasica($this->cedula) || !Core::ValidacionBasica($this->codEmpleado) || !Core::ValidacionBasica($this->nombreEmpleado) || !Core::ValidacionBasica($this->nombrePDF) || !Core::ValidacionBasica($this->tipoPermiso) || !Core::ValidacionBasica($this->textoFinal)) {
            return Core::MsgError("Error, no se puede mostrar '\$textoFinal' "
                ."ya que debe primero invocar los metodos "
                ."SetNombreEmpleado(), SetCedula(), SetCodEmpleado() y SetTipoPermiso(). "
                ."Ademas deberá invocar todos los metodos 'InsertXXX' de la clase 'Permiso' "
                ."para poder asignar efectivamente los datos del PDF.");
        }else {
            //Formateo de Documento
            //$this->Reemplazar('##T', $this->tab);//Marca de Tabulacion
            //$this->Reemplazar('##2T', $this->superTab);//Marca el doble de Tabulacion
            //$this->Reemplazar('##AR', $this->tab);//Alinear a la derecha (Align to Right)
            //$this->Reemplazar('##AL', $this->tab);//Alinear a la Izquierda (Align to Left)
            //$this->Reemplazar('##AJ', $this->tab);//Alinear a Justificado (Align to Justify)
            //$this->Reemplazar('##AC', $this->tab);//Alinear a Centrado (Align to Left)

            //Reemplazo de Datos por los del Usuario
            $this->pdf->SetCabecera("Cabecera");
            $this->InsertFecha();
            $this->InsertNombreEmpleado();
            $this->InsertAsuntoPermiso();
            $this->InsertCedula();
            $this->InsertCodEmpleado();
            $this->InsertTipoPermiso();
            $this->InsertCargoDestinatario();
            $this->InsertFechaFinal();
            $this->InsertFechaInicio();
            $this->InsertInstitucionDestinatario();
            $this->InsertNombreDestinatario();
            $this->InsertSegmento();
            $this->InsertNDiasPermisosMes();
            $this->InsertNDiasPermisosParcialesMes();
            $this->InsertNPermisosMes();
            $this->InsertTotalDiasPermisoActual();
            $this->InsertTotalDiasPermisoMes();
            $this->InsertIdPermiso();
            //$this->InsertFirma();

            // Experimento. Separacion en cadenas de los parrafos. A ver si se imprime con mayor legibilidad los PDF
// Metodo ideal para cortar texto: preg_split();
// contar numero de parrafos: count()
// determinar la justificacion del parrafo: _J_ :justificar, _C_ :centrar, _R_ :derecha, _L_ :Izquierda
// eliminar carcteres clave de alineacion:preg_replace($patron, $reemplazo, $reemplazar)
        $this->pdf->SetFont("dejavusans", '', 10);// Definimos el tipo de letra
/*
 * Este bloque de código solo debe aplicarse si no se desea usar HTML para generar el PDF.
$texto=$this->textoFinal;
        $ArrayTexto=preg_split('[\n]', $texto);
        $NumParrafos=count($ArrayTexto);

        for($i=0;$i<$NumParrafos;$i++){
            $parrafoActual=$ArrayTexto[$i];
            if (strpos($ArrayTexto[$i], '^')) {
            $subArray2=preg_split('[\^]', $ArrayTexto[$i]);
            $parrafoActual=$subArray2[1];
            $align=$subArray2[0];
            }

                $this->pdf->Write(0, $parrafoActual." \n", '', 0, $align);
        }
 *
 */
        $this->pdf->writeHTML($this->textoFinal);
        return true;
        }
    }//Fin del metodo

    public function SetPiePagina($pie)
    {
        $this->piePagina=$pie;

    }

    public function GetPiePagina($estilo=0)
    {
        return $this->PrintEstiloTexto($this->piePagina, $estilo);
        
    }

    public function SetNombrePDF($nombrePDF)
    {
        $this->nombrePDF=$nombrePDF;
        
    }

    public function GetNombrePDF()
    {
        return $this->nombrePDF;
    }

    public function PrintEstiloTexto($texto,$estilo='B'){
        // valores de estilo: ['B'=>Negrita (por defecto),'I'=>Cursiva, 'BI'=>NegritaCursiva,0=>Normal]
        if ($estilo=='B' || $estilo=='b') {
            $texto="<b>$texto</b>";
            return $texto;
        }elseif ($estilo=='I' || $estilo=='i') {
            $texto="<i>$texto</i>";
            return $texto;
        }elseif ($estilo=='BI' || $estilo=='bi' || $estilo=='Bi' || $estilo=='bI' || $estilo=='ib' || $estilo=='IB' || $estilo=='Ib' || $estilo=='iB') {
            $texto="<b><i>$texto</i></b>";
            return $texto;
        }elseif ($estilo=='r' || $estilo=='R') {
            // estilo regular
            return $texto;
        }else {
            return Core::MsgError("Error, no se ha encontrado un estilo que coincida con parametro dado al metodo 'PrintEstiloTexto()'.");
        }
    }

    public function Reemplazar($textoViejo,$textoNuevo){
        if (Core::ValidacionBasica($this->textoFinal)) {
            // return true;
        }else {
            return Core::MsgError("Error, no puede realizar en este momento un "
                ."reemplazo en el documento, ya que aun esta sin definir el "
                ."contenido principal.");
        }
        if (strpos($this->textoFinal, $textoViejo)) {// se verifica que el texto que se desea reemplazar exista primero en la cadena
            $nuevaCadena=str_replace($textoViejo, $textoNuevo, $this->textoFinal);
            if ($this->textoFinal=$nuevaCadena) {// validamos que el reemplazo se haya realizado exitosamente.
                return true;
            }else {
                return Core::MsgError("Error, no se pudo asignar un nuevo "
                    ."reemplazo al '\$textoFinal', en el metodo 'Reemplazar()'");
        }
            
        }else {
            return Core::MsgError("Error, no se puede realizar el reemplazo "
                ."de '$textoViejo' por '$textoNuevo' ya que la cadena '$textoViejo' no"
                ." está presente en el contenido del documento.");
        }
        
    }


    public function GenerarPDF()
    {
        if ($this->EstadoSettigTextoFinal==0) {
            return Core::MsgError("Error, no se puede generar el PDF sin antes haber invocado correctamente los metodos Setter's e Insert's");
        }else {
            
            $this->GetTextoFinal();

/**
 * if ($this->GuardarPermiso()) {
                    //Core::Msg("Permiso guardado satisfactoriamente.".Core::AtrasURL("../print.solicitar_permiso.php","Terminar"));
                    $this->pdf->Output($this->GetNombrePDF().'_'.$this->cedula.'_'.Core::GetDateTime(1).'.pdf', 'D');
                    }
 */

                try{
                    $this->pdf->Output($this->GetNombrePDF().'_'.$this->cedula.'_'.Core::GetDateTime(1).'.pdf', 'D');
                    
                }catch(Exception $e){
                    Core::MsgError("ERROR, {$e->getMessage()}, código: {$e->getCode()}.");
                }
      
        }
        
    }// Fin de metodo

    public function GuardarPermiso(){
        $db=new BD();
        $sql="INSERT INTO permisos_empleados () VALUES (null
,{$this->getIdEmpleado()}
,'{$this->getTipoPermiso()}'
,'{$this->getAsuntoPermiso()}'
,current_date()
,current_time()
,'{$this->getFechaInicio()}'
,'{$this->getFechaFinal()}'
,0
,'default'
,'{$this->segmento}',
DATEDIFF('{$this->getFechaFinal()}','{$this->getFechaInicio()}'));";
        /*
         * De abajo hacia arriba:
         * Segmento del dia: default significa que no fue seleccionado en el formulario.
         * Responsable de aprobacion:
         */
        
        //$afectados=$bd->punteroBD->affected_rows;
        if (!$db->Query($sql)) {
            throw new Exception("No se pudo guardar los datos de la solicitud de permiso en la BD.", 600001);
        }
        $ultimo=mysqli_insert_id($db->punteroBD);
        return $ultimo;
    }//Fin del Metodo
}// Fin de Clase
?>